Blinking led

Contenido

Circuito con 3 led parpadeantes como salidas y un botón como entrada para pausar la secuencia de encendido de los leds.

Circuito

Blinking leds SimulIDE

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void) {
    // Configura PB0 PB1 PB2 como salida
    DDRB |= (1 << PB0);
    DDRB |= (1 << PB1);
    DDRB |= (1 << PB2);

    // Configura PD2 como entrada
    DDRD &= ~(1 << PD2);

    // Configura PD2 con resistencia pull-up interna
    PORTD |= (1 << PD2);

    // Definimos array de puertos
    uint8_t portArray[] = {PB0, PB1, PB2};

    while (1) {
        // Iteramos por los 3 puertos
        for(int i=0; i < sizeof(portArray); i++){
            PORTB ^= (1 << portArray[i]);  // Hacemos toggle del led

            _delay_ms(500);

            // Si pulsamos el boton hacemos que se pare la secuencia hasta que soltemos.
            // La negacion de la condicion es porque tenemos configurado el puerto con resistencia pull-up y la condicion se invierte
            while(!(PIND & (1 << PD2))){
                _delay_ms(200);
            }
        }

    }
}
Tags

AVR | blinking | leds